#include <iostream>
#include <functional>
#include <vector>
#include <signal.h>
#include <unistd.h>
using namespace std;

void Printpending(sigset_t pending)
{
    // printf("
    printf("pending signal: pid:%d", getpid());
    cout<<endl;

    for (int i = 31; i >= 1; i--)

    {
        if (sigismember(&pending, i))
        {
            cout << 1;
        }
        else
        {
            cout << 0;
        }
    }
    cout << endl;
}

void sig_handler(int signum)
{
    printf("%d号信号递达！", signum);
    cout<<endl;
}
int main()
{
    signal(SIGINT, sig_handler);
    sigset_t block, oblock;
    sigemptyset(&block);
    sigemptyset(&oblock); 
    sigaddset(&block, SIGINT);
    int n = sigprocmask(SIG_BLOCK, &block, &oblock);
    (void)n;
    int cnt = 0;

    while (true)
    {
        sigset_t pending;
        int m = sigpending(&pending);
        (void)m;

        Printpending(pending);

        if (cnt == 10)
        {
            sigprocmask(SIG_SETMASK, &oblock, NULL);
            cout << "解除2号信号的屏蔽" << endl;
        }
        sleep(1);
        cnt++;
    }
    return 0;
}


// using  fuct=function<void()>;

// void show()
// {
//     cout<<"*********************"<<endl;
//     cout<<"lalala"<<endl;
// }
// void visit()
// {
//     cout<<"********************"<<endl;
//     cout<<"hhhhahahhahha"<<endl;
// }
// void hello()
// {
//     cout<<"*********************"<<endl;
//     cout<<"goodbye"<<endl;
// }
// std::vector<fuct> vec;

// void sig_handler(int signum)
// {
//     for(auto f:vec)
//     {
//         f();
//     }
//     cout<<"sig_handler"<<endl;
//     // exit(9);
//    int n= alarm(1);
//    cout<<"alarm"<<n<<endl;
// }
// int main()
// {
//      vec.push_back(show);
//      vec.push_back(visit);
//      vec.push_back(hello);
//     signal(SIGALRM, sig_handler);
//     alarm(1);
//     while (true)
//     {
//         /* code */
//         pause();
//     }

//     return 0;
// }